home *** CD-ROM | disk | FTP | other *** search
/ Aminet 32 / Aminet 32 (1999)(Schatztruhe)[!][Aug 1999].iso / Aminet / util / libs / graphics3d.lha / src / library / graphics3D.h < prev    next >
Encoding:
C/C++ Source or Header  |  1999-02-16  |  15.0 KB  |  457 lines

  1. /*
  2. **      $VER: graphics3d.h 10.02 (02.03.98) 
  3. ** 
  4. **      main include file for graphics3d.library
  5. **
  6. **      (C) Copyright 1997 Patrizio Biancalani
  7. **      All Rights Reserved.
  8. */
  9.  
  10. #ifndef GRAPHICS3D_GRAPHICS3D_H
  11. #define GRAPHICS3D_GRAPHICS3D_H
  12.  
  13. #define JAM1 0
  14. #define JAM2 1
  15. #define COMPLEMENT 2
  16. #define INVERSVID 4
  17. #define PROSP_P 0    /* tipo proiezione prospettica */
  18. #define PARAL_P 1    /* tipo proiezione parallela */
  19. #define WIREF    0    /* modo visualizzazione in wire frame */
  20. #define SOLID    2    /* modo visualizzazione in solid */
  21. #define FLAT     1    /* modo visualizzazione in flat shading */
  22. #define GORAUD  3    /* modo visualizzazione in goraud shading */
  23. #define TMAP    0x10    /* modo visualizzazione in texture mapping */
  24. #define ZPLANE  0       /* #1 modo clippaggio oggetti */
  25. #define FRUSTUM 1       /* #2 modo clippaggio oggetti */
  26. #define END_T  0    /* fine array tag3d di dati */
  27. #define TRASP  1000    /* valore registro colore che indica trasparente */
  28.  
  29. /* 
  30.   tipi dati per tag3d.tipo riconosciuti attualmente per 
  31.   funzione GD_cascene()
  32. */
  33. #define CS_PROJET 1    /* tipo di proiezione */
  34. #define CS_SBUFF  2     /* attivazione o meno single buffering */
  35. #define CS_GCOLOR 3    /* nuovo colore sfondo box di visualizzazione */
  36. #define CS_VDIST  4    /* nuovo valore distanza da piano di proiezione */
  37. #define CS_NPX0      5     /* nuova posizione X per box di visualizzazione */
  38. #define CS_NPY0   6     /* nuova posizione Y per box di visualizzazione */
  39. #define CS_ZOOM   7    /* nuovo valore per zoom scena */
  40. #define CS_ZBUF      8    /* attivazione o meno z-buffering */
  41. #define CS_VIEWP  9    /* ritorna posizione attuale camera */
  42. /*
  43.   tipi dati per tag3d.tipo riconosciuti attualmente per
  44.   funzione GD_genpalette()
  45. */
  46. #define GP_RCOL   1    /* set n# colori da riservare per altri usi */
  47. #define GP_NCOL   2    /* set n# colori base da usare */
  48. #define GP_NLIV      3    /* set n# livelli d'intensita' per ogni colore */
  49. #define GP_COL      4    /* set n# colore a cui associare i prossimi GP_HRBG e GP_LRGB */
  50. #define GP_HRGB   5    /* definisce i valori RGB massimi per un colore (def.15,15,15) */
  51. #define GP_LRGB   6    /* definisce i valori RGB minimi per un colore (def. 0,0,0) */
  52. #define GP_PALET  7    /* assegna uno specifico registro della palette al colore GP_COL */
  53. #define GP_INFO      8    /* restituisce il n# registro della palette del colore GP_COL */
  54. #define GP_TRASP  9     /* assegno colore trasparente ad ultimo e lo ignoro per i livelli */
  55. /*
  56.   tipi dati per tag3d.tipo riconosciuti attualmente per
  57.   funzione GD_modobj()
  58. */
  59. #define MO_STATE  1    /* attiva(1) o disattiva(0) l'oggetto attuale */
  60. #define MO_VMODE  2    /* setta il nuovo viewmode dell'oggetto attuale */
  61. /*
  62.   tipi dati per tag3d.tipo riconosciuti attualmente per
  63.   funzione GD_modpoly()
  64. */
  65. #define MP_POLY   1    /* set n# poligono su cui far operare le modifiche */
  66. #define MP_COLOR  2    /* modifica il colore del poligono */
  67. #define MP_2SIDE  3    /* setta a 2(1) o 1(0) faccia il poligono */
  68. #define MP_TMAP   4    /* assegna una texture map al poligono */
  69. #define MP_VTMAP  5    /* definisce i vertici della texture map del poligono */
  70. #define MP_VTAUTO 6    /* definisce i vertici automaticamente */
  71. #define MP_ACTIV  7    /* attiva(1) o disattiva(0) il poligono selezionato */
  72.  
  73. /** STRUTTURE DATI DI USO ESTERNO ED INTERNO **/
  74. /* vertice, usa formato float a virgola fissa ,(val*FIXV) */ 
  75. struct vertex
  76. {
  77. long int x;
  78. long int y;
  79. long int z;
  80. };
  81.  
  82. /* vertice su texture map (valori in pixel intero corto)*/
  83. struct vtmap
  84. {
  85. short int x1;
  86. short int y1;
  87. short int x2;
  88. short int y2;
  89. short int x3;
  90. short int y3;
  91. short int x4;
  92. short int y4;
  93. };
  94.  
  95. /* struttura per definizione colore */
  96. struct rgbtype
  97. {
  98. short int r;
  99. short int g;
  100. short int b;
  101. };
  102.  
  103. /* struttura tag3d per definire un array di valori estendibile */
  104. /* analogo alla struttura TagItem dell' Amiga O.S.             */
  105. struct tag3d
  106. {
  107. short unsigned int tipo;    /* flag che identifica valore 
  108.                         (se=0 fine array) */
  109. long int val;            /* valore effettivo */
  110. };         
  111.  
  112. /* !!! STRUTTURE E DEFINIZIONI GLOBALI DI USO ESCLUSIVAMENTE INTERNO !!! */
  113.  
  114. /** COSTANTI DI USO SOLO INTERNO **/
  115. #define SFIXV   8       /* n# di shift per cal. num. virgola fissa */
  116. #define FIXV    256    /* fattore moltipl. per num. virgola fissa */
  117. #define FIXVM   128    /* meta' di FIXV , per effettuare appros.  */
  118. #define MFRAC   FIXV    /* maschera per estrarre parte frazionaria */
  119. #define MINT 0xFFFFFFFF /* maschera per estrarre parte intera */
  120. #define MAXPOINT  4    /* massimo numero di punti per poligono */
  121. #define MAXOBJECT 200    /* massimo numero oggetti per mondo 3D (max. 65535)*/
  122. #define MAXVERT   6300    /* massimo numero vertici in un poligono */
  123. #define MAXDX      3000  /* massima larghezza box di visualizzazione */
  124. #define MAXDY      3000    /* massima altezza box di visualizzazione */
  125. #define TTMAP      200    /* n# massimo di texture map definibili per una scena */
  126. #define LEN_TABC 300*4    /* dimensioni tabella colori */
  127. #define FOV_M      15    /* margine in piu' per box vis. nel calcolo del fov */
  128.  
  129. /************ macro solo locali *******/
  130. #define SMARG  16 
  131. #define SMARGM 8
  132. #define LTMP 1000
  133. #define ATMP 1000
  134.  
  135. /* matrice di trasformazione (4x4) */
  136. /* usa formato float a virgola fissa ,(val*FIXV) */ 
  137. struct matrix4x4
  138. {
  139. long int r0c0;
  140. long int r0c1;
  141. long int r0c2;
  142. long int r0c3;
  143. long int r1c0;
  144. long int r1c1;
  145. long int r1c2;
  146. long int r1c3;
  147. long int r2c0;
  148. long int r2c1;
  149. long int r2c2;
  150. long int r2c3;
  151. long int r3c0;
  152. long int r3c1;
  153. long int r3c2;
  154. long int r3c3;
  155. };
  156.  
  157. /* matrice di trasformazione (1x4) */
  158. /* usa formato float a virgola fissa ,(val*FIXV) */ 
  159. struct matrix1x4
  160. {
  161. long int r0c0;
  162. long int r0c1;
  163. long int r0c2;
  164. long int r0c3;
  165. };
  166.  
  167. /* vettore */
  168. /* usa formato float a virgola fissa ,(val*FIXV) */ 
  169. struct vector
  170. {
  171. long int x;
  172. long int y;
  173. long int z;
  174. long int w;
  175. };
  176.  
  177. /* vertice + colore, usa formato float a virgola fissa ,(val*FIXV) */ 
  178. struct vert1
  179. {
  180. long int x;
  181. long int y;
  182. long int z;
  183. short int color;    /* colore vertice in flat shading */
  184. short int npol;        /* n# di volte vertice usato */
  185. };
  186.  
  187. /* pixel */
  188. /* usa formato intero a 2 bytes */
  189. struct pixel
  190. {
  191. short int x;
  192. short int y;
  193. };
  194.  
  195. /* struttura per definire una linea */
  196. /* usa due riferimenti a strutture vertice */
  197. struct line
  198. {
  199. struct vertex *a;        /* puntatore a st. vertex di partenza */
  200. struct vertex *b;        /* puntatore a st. vertex d'arrivo */
  201. };
  202.  
  203. /* struttura per definire direzione in spazio 3d */
  204. struct dir3d
  205. {
  206. long int angx;
  207. long int angy;
  208. long int angz;
  209. };
  210.  
  211. /* struttura pixel usata nella versione _CPU per disegnare i poligoni */
  212. struct pixl {
  213.     long int x;
  214.     long int y;
  215.     long int z;
  216.     long int u;    /* (x) */
  217.     long int v;    /* (y) */
  218.     long int color;
  219.     };
  220.  
  221. /* elementi tabelle scan line nel goraud shading */
  222. struct edge {
  223.     short int x;
  224.     short int color;
  225.     long int z;
  226.     long int u;    /* (x) */
  227.     long int v;    /* (y) */
  228.     };
  229.  
  230. /* struttura per definire un'area per buffer di una texture map */
  231. struct buftmap 
  232. {
  233. unsigned char *chunky;    /* area di memoria per buffer chunky se=0 allora vuota */
  234. long int lung;        /* lunghezza buffer di memoria */
  235. short int larg;        /* larghezza texture map (in pixel) */
  236. short int alt;        /* altezza texture map (in pixel) */
  237. };
  238.  
  239. /* struttura per definizione texture in un poligono */
  240. struct poltmap
  241. {
  242. short int u1;        /* coord u #1 vertice su texture (in pixel) */
  243. short int v1;        /* coord v #1 vertice su texture (in pixel) */
  244. short int u2;        /* coord u #2 vertice su texture (in pixel) */
  245. short int v2;        /* coord v #2 vertice su texture (in pixel) */
  246. short int u3;        /* coord u #3 vertice su texture (in pixel) */
  247. short int v3;        /* coord v #3 vertice su texture (in pixel) */
  248. short int u4;        /* coord u #4 vertice su texture (in pixel) */
  249. short int v4;        /* coord v #4 vertice su texture (in pixel) */
  250. struct buftmap *dtmap;    /* puntatore a struttura con dati texture */
  251. }; 
  252.  
  253. /* struttura per definizione di un poligono */
  254. struct polygon
  255. {
  256. char numpoints;
  257. short int color;
  258. short int shade;
  259. char twosided;
  260. char visible;
  261. char clipped;
  262. char active;
  263. struct poltmap ptmap;    /* struttura descritrice texture poligono */
  264. long int vertexlist0;    /* puntatore a #1 indice vertici */ 
  265. long int vertexlist1;     /* puntatore a #2 indice vertici */
  266. long int vertexlist2;     /* puntatore a #3 indice vertici */ 
  267. long int vertexlist3;    /* puntatore a #4 indice vertici */
  268. char dummy;        /* per far si che la lunghezza sia pari */
  269. };
  270.  
  271. /* struttura di descrizione di un oggetto */
  272. struct objectnode
  273. {
  274. long int id;        /* identificativo univoco per oggetto */
  275. long int dummy;        /* pad per poter usare name con StringF */ 
  276. char name[22];
  277. long int numverts;
  278. struct vertex *vorig;    /* puntatore a elenco vertici loc. orig. */
  279. struct vertex *vlocal;    /* puntatore a elenco vertici locali */
  280. struct vert1  *vcamera;    /* puntatore a elenco vertici camera */
  281. long int numpolys;
  282. struct polygon *polys;    /* puntatore a elenco poligoni */
  283. char shade;        /* metodo di visualiz. (WIRE,SOLID,FLAT,GORAUD) */
  284. char state;        /* segnala se oggetto da visualizzare */
  285. char clipped;        /* segnala se oggetto clippato interamente*/
  286. char trasf;        /* flag per segnalare eventuale trasf. avv.*/
  287. long int worldposx;    /* coord. x punto d'inserzione oggetto */
  288. long int worldposy;    /* coord. y  "        "          "     */
  289. long int worldposz;    /* coord. z  "        "          "     */
  290. long int xmax;        /* vertici bounding box oggetto */
  291. long int ymax;        /*              "               */
  292. long int zmax;        /*        "        */
  293. long int xmin;        /*        "        */
  294. long int ymin;        /*        "        */
  295. long int zmin;        /*        "        */    
  296. };
  297.  
  298. /* struttura per definizione di un poligono proiettato da visualizzare */
  299. struct polytemp
  300. {
  301. short int    x1;
  302. short int    y1;
  303. short int    x2;
  304. short int    y2;
  305. short int    x3;
  306. short int    y3;
  307. short int    x4;
  308. short int    y4;
  309. short int    x5;
  310. short int    y5;
  311. short int numpoints;
  312. struct poltmap *tmap;    /* puntatore a struttura descritrice texture map poligono */
  313. short int     color;
  314. short int     shade;
  315. short int       obj;
  316. long  int      npol;
  317. long  int    svalue;
  318. char          vmode;
  319. char          clp1;
  320. char          clp2;
  321. char           clp3;
  322. char          clp4;
  323. long   int    z1;
  324. long   int    z2;
  325. long   int    z3;
  326. long   int    z4;
  327. char          dummy;
  328. };
  329.  
  330. /** 
  331.     struttura di descrizione generale ambiente, il puntatore ad essa 
  332.     va dato come primo parametro al richiamo di ogni funzione 
  333.     dall'esterno
  334. **/
  335. struct ambient3d
  336. {
  337. struct grafica *graf;        /* valore ritornato da PE_ini_g */
  338. struct Window *win;        /* punt. a finestra usata */
  339. long int half_screen_width;
  340. long int half_screen_height;
  341. long int viewing_distance;
  342. short int gl_triangle_color;
  343. short int minx;
  344. short int miny;
  345. short int maxx;
  346. short int maxy;
  347. short int maxintensity;
  348. long int near_z;
  349. long int far_z;
  350. long int fov_w;
  351. long int fov_h;
  352. long int zoom;            /* num. reale a virgola fissa (val*FIXV) */
  353. long int aspect_ratio;        /* num. reale a virgola fissa (val*FIXV) */
  354. long int ambient_light;        /* num. reale a virgola fissa (val*FIXV) */
  355. long int inv_aspect_ratio;    /* num. reale a virgola fissa (val*FIXV) */
  356. long int bord_col;        /* colore bordo poligoni (se <0 no bordo)*/
  357. long int gcolor;        /* colore sfondo scena */
  358. char projection_type;        /* tipo di proiezione (0=pros. 1=paral.) */
  359. char view_mode;            /* modo vis. (1=flat 0=wire 2=solid 3=goraud) */
  360. char fzbuf;            /* flag attivazione zbuffer (1=si 0=no) */
  361. char clip_mode;
  362. char agg_all;            /* flag per forzare aggiornamento scena */
  363. long int dummy;
  364. struct vector light_source;    /* puntatore a struttura vector */
  365. long int dummy1;
  366. struct vector view_point;    /* puntatore a struttura vector */ 
  367. struct dir3d view_angle;    /* puntatore a struttura dir3d */
  368. struct matrix4x4 global_view;    /* puntatore a struttura matrix4x4 */
  369. char *temp;            /* puntatore ad area per uso temporaneo */
  370. long int ltemp;            /* lunghezza area temp */
  371. long int *iobjects;        /* punt. ad array con indici su objects */
  372. struct objectnode *objects;    /* punt. ad array di strutture objectnode */
  373. long int *iwpolys;        /* punt. ad array puntatori su worldpolys */
  374. struct polytemp *worldpolys;    /* punt. ad array di strutture polytemp */
  375. long int *sintable;        /* punt. ad array di reali a virg. fissa */
  376. long int *costable;        /* punt. ad array di reali a virg. fissa */
  377. long int total_polys;        /* n# totale poligoni da tracciare */
  378. short int total_objects;    /* n# totale oggetti presenti */
  379. long int max_polys;        /* n# massimo poligoni presenti */
  380. long int old_mpoly;        /* vecchio valore per n# massimo poligoni presenti */
  381. long int attuale;        /* oggetto attualmente selezionato */
  382. long int numero;        /* numero inc. alla creazione di un oggetto*/
  383. long int iterazioni;        /* n# iterazioni per sorting */
  384. char dummyy;
  385. };
  386.  
  387. /* !!! STRUTTURE E DEFINIZIONI GLOBALI DI USO ESCLUSIVAMENTE INTERNO !!! */
  388.  
  389. #define MAXVER(vert) (vert*5+30)
  390.  
  391. /**** dichiarazioni per poter usare sizeof con queste strutture  ****/
  392. /**** probabilmente utile solo se si usa VBCC v0.5 ****/
  393.  
  394. typedef struct grafica Sgrafica;
  395. typedef struct AreaInfo SAreaInfo;
  396. typedef struct TmpRas STmpRas;
  397. typedef struct RastPort SRastPort;
  398. typedef struct objectnode Sobjectnode;
  399. typedef struct vertex Svertex;
  400. typedef struct vert1 Svert1;
  401. typedef struct polygon Spolygon;
  402. typedef struct vector Svector;
  403. typedef struct polytemp Spolytemp;
  404. typedef struct dir3d Sdir3d;
  405. typedef struct matrix4x4 Smatrix4x4;
  406. typedef struct ambient3d Sambient3d;
  407. typedef struct edge Sedge;
  408. typedef struct buftmap Sbuftmap; 
  409.  
  410. /********************************************************************/
  411.  
  412. struct grafica
  413. {
  414.  struct AreaInfo *o_ai;    /* valore originale puntatore ad areainfo */
  415.  struct TmpRas *o_tr;    /* valore originale puntatore ad tmprast */    
  416.  struct AreaInfo n_ai;    /* nuova areainfo */
  417.  struct TmpRas n_tr;    /* nuova tmpras */
  418.  long int *t_color;    /* puntatore a tabella colori virtuali base */
  419.  struct buftmap *a_tmap;/* puntatore ad array di strutture per definizione texture map */
  420.  char *pras;        /* puntatore a area di memoria grafica */
  421.  char *b_af;        /* puntatore a buffer vettori per areafill */
  422.  short int r_color;    /* n# colori da non usare nella gen. palette */
  423.  short int n_level;    /* n# livelli intensita' per ogni colore */
  424.  short int n_color;    /* n# colori base nella palette */
  425.  long int depth;    /* n# colori disponibili nella palette dello schermo usato */
  426.  long int lb_af;    /* dimensioni area precedente */
  427.  struct ViewPort *vpor;    /* puntatore a viewport dello schermo della fin.*/
  428.  struct RastPort *rast;    /* puntatore a rastport usato dalle routin */
  429.  struct Window *wind;    /* puntatore a finestra su cui agire */
  430.  long int larg;        /* larghezza box in cui lavorera' areafill */
  431.  long int alte;        /* altezza box in cui lavorera' areafill */
  432.  short int clipx;    /* origine x clip box */
  433.  short int clipy;     /* origine y clip box */
  434.  short int clipdx;    /* larghezza clip box */
  435.  short int clipdy;    /* altezza clip box */
  436.  long int *zbuf;    /* puntatore ad area per z-buffering */
  437.  long int lzbuf;    /* lunghezza area precedente */
  438. /** estensioni per double buffering **/
  439.  char    fdouble;    /* flag per attivare double buffer (0=off 1=on)*/
  440. /** campi usati da libreria ottimizzata **/
  441.  char *dbuf;        /* puntatore ad display buffer chunky*/
  442.  long int ldbuf;    /* lunghezza in bytes di area dbuf */
  443.  struct RastPort tmp_rp;/* rastport temporanea */
  444. /******************************************/
  445.  struct RastPort *rast1;/* puntatore a rastport della finestra*/
  446.  struct RastPort *rast2;/* puntatore a rastport nascosto */
  447. /** campi usati da libreria normale **/
  448.  struct RasInfo    *NB_rinfo;       
  449.  struct BitMap     *NB_bmap;        
  450.  struct Layer_Info *NB_layerinfo;   
  451.  struct Layer      *NB_layer;       
  452. /*************************************/
  453. };
  454.  
  455.  
  456. #endif /* GRAPHICS3D_GRAPHICS3D_H */
  457.